package cn.highedu.spring;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;

/**
 * 使用@Bean注解 声明Spring Bean组件
 * @Bean使用在方法上, 默认情况下 标识(id)是方法的名字
 * 使用注解@Bean的前提条件, 当前类本身必须是一个管理类(自己被@Configuration声明)
 */
@Configuration // 声明这是一个管理类(代替原始的XML文件的功能)
@ComponentScan("cn.highedu.spring") // 声明扫描的包
public class MyConfig {
    /**
     * 声明一个Bean组件
     * Bean的标识(id) 是names
     * @return
     */
    @Bean
    public ArrayList<String> names() {
        ArrayList<String> names = new ArrayList<>();
        names.add("Tom");
        names.add("Jerry");
        return names;
    }

    @Bean("cities") // 被管理对象的标识(id)设置为cities
    public ArrayList<String> list() {
        ArrayList<String> cities = new ArrayList<>();
        cities.add("北京");
        cities.add("上海");
        cities.add("天津");
        cities.add("重庆");
        return cities;
    }

    /**
     * 被容器管理的对象的标识(id)是moreCities
     * @param cities 被Spring容器管理的其他对象
     * @return
     */
    @Bean
    public ArrayList<String> moreCities(ArrayList<String> cities) {
        cities.add("深圳");
        cities.add("杭州");
        return cities;
    }

    @Bean // 声明一个user对象被Spring管理 在Spring容器中的标识是getUser
    public User getUser() {
        User user = new User();
        user.setId(1);
        user.setName("张三");
        return user;
    }

    @Bean
    public User getUser1(User getUser) {
        getUser.setName("李四");
        return getUser;
    }
}
